package ca.etsmtl.gti785.servlet.Interfaces;


import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.server.ManagedAsync;

//@Path("serverInfos") <-- mettre ceci dans la classe qui implemente cette interface
/**
 * Interface pour le server info (pour la méta-équipe)
 * @author Timothé Fillion-Brunet
 */
public interface IServerInfos {
	
	/**
	 * 1. L’état des serveurs de fichiers (en ligne ou hors ligne) doit être maintenu
	 * 	dans la liste de serveurs enregistrés en temps réel.
	 * 
	 * 3. L’utilisateur doit recevoir une notification lors de l’ajout ou du retrait de 
	 * 	fichiers sur un serveur de fichiers qui est enregistré sur sa liste.
	 * 
	 * 	-- Je vais les mettre ensemble car on va faire du long pooling avec le #3 ce qui permet de
	 * 		savoir si le serveur est toujours disponible. si la connexion coupe, ca va faire un timeout
	 */
	
	//envoi d'un JSON {add:[Fichier,...],remove:[Fichier,...]}
	//@Path("notification") <-- mettre ceci dans la classe qui implemente cette interface
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@ManagedAsync
	public void getNotification(@Suspended final AsyncResponse asyncResponse);
	
	/**
	 * 2. Les serveurs sont présentés à l’utilisateur selon plusieurs critères (leur
	 *	distance géographique, leur nom, la dernière date d’accès par l’utilisateur).
	 *
	 *	--La distance va etre calculé sur le mobile. Le serveur retourne seulement la position de lui-meme
	 *
	 */
	
	//envoi JSON {lon:"",lat:"",serverName:"",lastAccess:(Date)}
	//@Path("info") <-- mettre ceci dans la classe qui implemente cette interface
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public String getInfo();
	
	//@Path("QRCode") <-- mettre ceci dans la classe qui implemente cette interface
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public String getQRCode(@Context ServletContext context);

}
